Serial Attached SCSI (Small Computer System Interface), or SAS, is a connection-oriented protocol that allows storage devices, like servers and disk drives, to communicate through a network of high-speed serial physical interconnects. Connections between a host device and a target drive are managed by intermediate devices called expanders. SAS expanders act as connection management agents, much like a switch element, having physical connections to multiple host devices or disk drives simultaneously.
The SAS specification defines three transport level protocols, which are used in a SAS topology under different circumstances: Serial SCSI Protocol (SSP), Serial Management Protocol (SMP), Serial Advanced Technology Attachment Tunnelling Protocol (STP). An STP connection is set up when a SAS host device accesses a Serial Advanced Technology Attachment (SATA) disk drive or vice versa. Once the connection is set up, data transfer occurs between the host device and the disk as per the SATA protocol, at a half-duplex rate.
The SATA protocol makes use of 32-bit constructs called Dwords and special control Dwords, called primitives. All SATA primitives are either repeated or singular. Repeated primitives are redundant control Dwords that are required to be sent two at a time. Single primitives are control Dwords with no such restriction. A repeated primitive indicates a data transmitter or receiver state whereas a single primitive is associated instead with a particular Dword position. For example, an X_RDY repeated primitive indicates that a data frame (referred to as a frame information structure, or FIS) is ready for transmission. Likewise, an R_RDY repeated primitive indicates that a data receiver is ready for frame reception. These primitives indicate a transmitter or receiver state. In contrast, a single primitive such as SOF marks a specific Dword (in this case, the position of the start of frame). For reference, all SATA primitives, along with their respective functions, are listed in the table below:
TABLE 1DMATDMA terminate. Sent by a data receiver in order to terminate a FISSingletransfer.EOFEnd of frame Dword. If a data receiver is in the midst of receiving aSingleFIS, the preceding data Dword shall be considered as the CRC Dwordof the FIS.HOLDHold data transmission. Sent by a data transmitter when it temporarilyRepeatedhas no more data to send. Also sent by a data receiver to throttle theflow of data in the forward channel.HOLDAHold acknowledge. Sent by a data transmitter or receiver toRepeatedacknowledge reception of a HOLD primitive.PMACKPower management acknowledge. Sent by a disk to acknowledge aSinglepower management request.PMNAKPower management denial. Sent by a disk to refuse a powerSinglemanagement request.PMREQ_PPower management request to partial. Sent by a host device to place aRepeateddisk into a power management partial mode.PMREQ_SPower management request to slumber. Sent by a host device to placeRepeateda disk into a power management slumber mode.R_ERRReception error. Sent by a data receiver to indicate that a FIS was notRepeatedreceived correctly.R_IPReception in progress. Sent by a data receiver to indicate that FISRepeatedreception is in progress.R_OKReception with no error. Sent by a data receiver indicating that a FISRepeatedwas received correctly.R_RDYReceiver ready. Sent by a data receiver to indicate that it is ready toRepeatedreceive a FIS.SOFStart of frame. Precedes first data Dword of FIS.SingleSYNCSynchronization. Indicates an idle state.RepeatedWTRMWait for frame termination. Sent by a data transmitter to indicate that aRepeatedFIS has been transmitted and is now awaiting an R_OK or R_ERR fromthe data receiver.X_RDYTransmission data ready. Sent by data transmitter to initiate a FISRepeatedtransfer.